﻿<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>

  <p>
    &nbsp;
  </p>
  <h1 style="text-align: center;">
    -----------------【概述】-----------------
  </h1>
  <p>
    <br />ps找算替.ps1，即powershell版的sed。是一个查找替换工具软件。
  </p>
  <p>
    1 找、算、替、是啥意思？
  </p>
  <p>1.1 找。找是基础。有三种模式:<br />
    1.1.1行查找。打开文件后，先拆分成行，行内查找；<br />
    1.1.2字符串查找。打开文件后，将文件作为大字符串，在字符串中查找；<br />
    1.1.3匹配头尾查找。打开文件后，将文件作为大字符串，先在字符串中查找匹配头，再在匹配头后查找匹配尾，如此循环；</p>

  <p>1.2 算。即你可以自己编写函数，用来处理找到的结果，函数运行完毕后，产生要【替】的字符串，并return它。</p>
  <p>1.3 替。和【算】互斥。用输入的字符串替换找到的内容。</p>
  <p>
    &nbsp;
  </p>
  <p style="color:red">
    脚本特色&优势：<br />
    区分大小写！ 不支持正则！<br />
    使用简单，尤其是匹配头尾查找<br />
    无需转义<br />
    带有替换前，自动备份功能<br />
    文本编码功能强<br />
    多文件找替速度比sed快。例如1000个文件，sed需要fork1000次【进程】，本脚本不需要，本脚本是【线程级别】。<br />
  </p>
  <p>
    &nbsp;
  </p>
  <p>

    《ps找算替v3》
    下载地址：
    <br />https://pan.baidu.com/s/1yuqUOhY9lEw65vJ-vceg4w



  </p>
  <p>
    《ps找算替v3》使用手册：
    <br />下载地址中，有个《ps找算替_v3_readme.html》

  </p>
  <p>
    2 我开发这个替换脚本，为了替换标准化，参数化。简化配置文件的处理。<br />3 我认为此版足够80%用了。免费使用。<br />4 根据需求，后续会开发正则版。或许收费。<br />5 支持下列os。系统需求：<br />5.1
    win7 + powershell 5.1<br />5.2 win10 + powershell 5.1<br />5.3 linux + powershell 6.x 7.x <br />5.4
    含mac，树莓派+win，树莓派+linux，docker，alpine。
  </p>
  <p>
    &nbsp;
  </p>
  <p>
    6 问题反馈：<br />powershell交流群<br />QQ群号=183173532
  </p>
  <p>
    &nbsp;
  </p>
  <p>
    7 版本说明：
  </p>
  <p>
    ps找算替2.x：只支持找替。
  </p>
  <p>
    ps找算替3.x：新增支持“算”。即你可以自己编写函数，用来处理找到的结果，函数运行完毕后，产生要【替】的字符串。
  </p>
  <p>
    ps找算替3.15：新增英文参数别名。新增命令行用法。
  </p>
  <hr />
  <h1 style="text-align: center;">
    -----------------【命令行用法】-----------------
  </h1>

  <p>
    #输入文件=utf8格式，全部替换，保存备份，<br />
    /tmp/ps找算替v3.15.ps1 -infile /tmp/a.txt -find 'SELINUX=disabled' -replace 'xxx1'
  </p>

  <hr />
  <h1 style="text-align: center;">
    -----------------【ps找算替.ps1 参数说明】-----------------
  </h1>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-输入文件全路径</span> <span
          style="text-align: left; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; word-spacing: 0px; display: inline !important; orphans: 2; float: none; -webkit-text-stroke-width: 0px; background-color: rgb(147, 137, 83);">字符串</span>
        &#39;xxx.txt&#39; 支持win决绝路径，相对路径。支持linux绝对路径，相对路径。
        <br />参数别名【-infile】
      </td>
    </tr>
  </table>





  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-输出文件全路径</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span> 默认
        空<br />值：<br />●空值。会备份输入文件。从源文件名，到，源文件名.年月日时分秒.powershell<br />●“直接写输入文件，不需要备份”<br />●一个输出文件路径<br />输出文件已经存在时，会覆盖输出文件！！！
        <br />参数别名【-outfile】
      </td>
    </tr>
  </table>

  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-输入文件编码</span>&nbsp;&nbsp; 是一个<span
          style="background-color: rgb(147, 137, 83);">数字</span>，如果输入文件有bom头，则会忽略此参数。<br />默认为空，空则报错退出。也就是说必须【显式指定】此参数<br />输入错误的编码，将导致输入文件损坏。
        数字，对应的【输入文件】编码<br />20127=Ascii<br />936=gbk<br />54936=gb18030<br />950=繁体中文BIG5<br />1200=utf16le=Unicode<br />1201=BigEndianUnicode<br />12000
        UTF32<br />12001=BigEndianUTF32<br />65001=UTF8<br /><br />
      </td>
    </tr>
  </table>

  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>

        <span style="background-color: rgb(247, 150, 70);">-找什么</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span>

        <pre class="brush:ps;toolbar:false">$某找替参数 =
@{
    找什么 =
@&#39;
这里可以有，不成对的单引号，双引号，也无需转义。不用转义，这点比sed好很多请看，下行我放入一个单引号
        &#39;
&#39;@

}

&amp; /powershell/ps找算替.ps1  @某找替参数</pre>
        <p>
          &nbsp;
          被查找的内容，支持内嵌变量，如：
        </p>


        <pre class="brush:ps;toolbar:false">$aaa = 1
$某找替参数 =
@{
    找什么 =
@&quot;
这里可以有，不成对的单引号， $aaa 双引号，也无需转义。不用转义，这点比sed好很多请看，下行我放入一个单引号
&#39;
&quot;@

}</pre>
        <br />参数别名【-find】
      </td>
    </tr>
  </table>



  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>


  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>

        <span style="background-color: rgb(247, 150, 70);">-找什么_块首</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span>

        <p>
          &nbsp;
          块查找参数。当“查找模式 = '匹配头尾'”时，参数可用。
        </p>
        <br />参数别名【-findstart】
      </td>
    </tr>
  </table>


  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>

        <span style="background-color: rgb(247, 150, 70);">-找什么_块尾</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span>
        <p>
          &nbsp;
          块查找参数。当“查找模式 = '匹配头尾'”时，参数可用。
        </p>
        <br />参数别名【-findend】
      </td>
    </tr>
  </table>

  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>




  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-用正则查找</span> <span
          style="background-color: rgb(147, 137, 83);">布尔</span> 。默认 $false 。暂不支持正则查找。<br /><br />
      </td>
    </tr>
  </table>

  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-区分大小写</span> <span
          style="background-color: rgb(147, 137, 83);">布尔</span> 。默认 $true 。暂不支持忽略大小写。<br /><br />
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-查找返回的结果必须唯一</span> <span
          style="background-color: rgb(147, 137, 83);">布尔</span> 默认 $true 。<br /><br />
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-查找模式</span>： <span
          style="background-color: rgb(147, 137, 83);">字符串</span><br />值：<br />●&#39;行&#39; 默认是行。行中含有查找内容，先删除此整行，用 -替换成啥
        输入的【字符串】来替换。可以用来 “去除行首#号和空格”。<br />●&#39;全文字符串&#39;，在整个文件中查找字符串。找到后，用 -替换成啥 输入的【字符串】来替换。
        支持查找回车“`n”<br />●&#39;匹配头尾&#39;。找算替v1.x版本不支持块头-块尾查找。找算替v2.x版本支持块头-块尾查找。<br />字符串模式，和块模式，支持多行查找，跨行查找。
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>
  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-找不到则在文件末尾追加</span> <span
          style="background-color: rgb(147, 137, 83);">布尔</span> 。默认 $false 。<br />当 找不到则在文件末尾追加 =
        $false，找不到关键字，则报错退出。退出码为11。这个退出码使用场景是：<br />查找'a'或'b'两个关键字。当其中一个找不到，那个找不到的就返回退出码11。找到的就返回0。<br />同理，也适合于查找'a'和'b'两个关键字。<br />当
        找不到则在文件末尾追加 = $true，找不到关键字，则在文件末尾追加。
        <br />参数别名【-append】
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-替换成啥</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span>
        <br />
        当【-不用替换成啥_而用ps代码替换 = $true】时，此【-替换成啥】输入的值失效。
        <br />参数别名【-replace】
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-返回结果不唯一时</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span>。&nbsp;
        默认 &#39;只替换最后一个&#39;<br />&nbsp;值：<br />●&#39;只替换第一个&#39;<br />●&#39;只替换最后一个&#39;<br />●&#39;全部替换&#39;
      </td>
    </tr>
  </table>

  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-不用替换成啥_而用ps代码替换</span> <span
          style="background-color: rgb(147, 137, 83);">布尔</span>，默认=假。<br />当值为真时，参数【替换成啥】失效。只能用下列【全局变量】：
        <br />参数别名【-usefunction】
        <p>
          【查找模式=行】时，将返回 <br />$global:行号<br />$global:当前找算替文件_行模式&nbsp;&nbsp; 变量类型=数组
        </p>
        <p>
          <br />【查找模式=全文字符串】时，将返回
          <br />$global:全文字符串查找模式_字符串开始字符_在文本中的位置<br />$global:全文字符串查找模式_字符串结束字符_在文本中的位置<br />$global:当前找算替文件_字符串模式&nbsp;&nbsp;
          变量类型=字符串
        </p>
        <p>
          <br />【查找模式=匹配头尾】时，将返回
          <br />$global:匹配头尾查找模式_块首开始字符_在文本中的位置<br />$global:匹配头尾查找模式_块尾结束字符_在文本中的位置<br />$global:匹配头尾查找模式_找到的字符串&nbsp;&nbsp;
          变量类型=字符串<br />$global:当前找算替文件_匹配头尾模式&nbsp;&nbsp; 变量类型=字符串
        </p>
        <p>
          &nbsp;
        </p>
        <p>
          只能用下列全局函数：<br />function global:计算代码<br />{<br />&nbsp;#在这里可以调用，上述全局变量。<br />
          这里可以使用正则，如 ：<br />
          $global:匹配头尾查找模式_找到的字符串 -replace 'aaa.*','bbb'<br />
          也可以调用其他脚本。<br />
          <br />&nbsp;return &#39;a1111111111b&#39;<br />}

        </p>
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>


  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-输出文件编码linux</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span> 默认 &#39;utf8无bom&#39;
        。如果输入文件有bom头，则会忽略此参数。<br />值：<br />●&#39;utf8无bom&#39;<br />●&#39;utf8有bom&#39;<br />●&#39;utf16le有bom&#39;
        <p>
          &nbsp;
        </p>
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>

  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <p>
          &nbsp;
        </p>
        <span style="background-color: rgb(247, 150, 70);">-输出文件编码win</span> <span
          style="background-color: rgb(147, 137, 83);">字符串</span> 默认 &#39;utf16le有bom&#39;
        。如果输入文件有bom头，则会忽略此参数。<br />值：<br />●&#39;utf8无bom&#39;<br />●&#39;utf8有bom&#39;<br />●&#39;utf16le有bom&#39;
        <p>
          输出文件，只支持上述三种编码。
        </p>
      </td>
    </tr>
  </table>
  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>





  <table border="8" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#323252"
    align="left">
    <tr>
      <td width="100%" height="100">
        <span style="background-color: rgb(247, 150, 70);">-脚本id</span> <span
          style="background-color: rgb(147, 137, 83);">数值</span>&nbsp; 默认为进程id，这是脚本防止出错参数，不要修改。
        <br />参数别名【-pid】
      </td>
    </tr>
  </table>
  <hr />
  <h1 style="text-align: center;">
    -----------------【脚本例子。脚本文件名：&nbsp;&nbsp;&nbsp; gb关闭selinux.ps1&nbsp; 】-----------------<br /><br />
  </h1>
  <p>
    #本例子linux测试通过。<br />#本例子 先把【ps找算替.ps1】保存在【/powershell/】中<br />#本例子目的：<br />#任何带有 SELINUX=enforcing
    的行，先清空。后写入SELINUX=disabled。若找不到，则报错。
  </p>
  <p>
    <br />$gb关闭selinux参数 =<br />@{<br />输入文件全路径&nbsp;&nbsp;&nbsp;&nbsp; =
    &#39;/etc/selinux/config&#39;<br />输出文件全路径&nbsp;&nbsp;&nbsp;&nbsp; =
    &#39;&#39;<br />输入文件编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
    65001<br />找什么&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = <br />@&#39;<br />SELINUX=enforcing<br />&#39;@
  </p>
  <p>
    替换成啥&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = <br />@&#39;<br />SELINUX=disabled<br />&#39;@
  </p>
  <p>
    查找返回的结果必须唯一 = $true<br />查找模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
    &#39;行&#39;<br />返回结果不唯一时&nbsp;&nbsp;&nbsp; = &#39;全部替换&#39;<br />找不到则在文件末尾追加 = $false<br />脚本pid = $pid #
    这行用于脚本防错，不要修改。<br />}
  </p>
  <p>
    <br />&amp; /powershell/ps找算替.ps1&nbsp; @gb关闭selinux参数<br />#注意： 这里不能用 /usr/bin/pwsh
    /powershell/ps找算替v1.22.ps1&nbsp; @gb关闭selinux参数
    <br />注意：你编写的ps1脚本，即“gb关闭selinux.ps1”，&nbsp;必须带有bom头。
  </p>
  <hr />
  <h1 style="text-align: center;">
    -----------------【脚本讲解】-----------------
  </h1>
  <p>
    <br />1 先建立一个哈希表，【$gb关闭selinux参数】。powershell哈希表中的空格，tab，空行不影响哈希表的结果。<br />2 执行【ps找算替.ps1】，按哈希表中的参数替换。<br />3 输入文件编码
    = 65001<br />如果输入文件有bom头，则会忽略此参数。此例子无bom头，则此参数必须设置，否则报错。<br />4输出文件全路径 =
    &#39;&#39;<br />会备份文件，<br />5查找替换完毕后，再次运行脚本，会报错“找不到关键字”
  </p>
  <hr />
  <h1 style="text-align: center;">
    -----------------【成品脚本1 脚本文件名：&nbsp;&nbsp;&nbsp; gb关闭sshd的dns.ps1】-----------------
  </h1>
  <p>
    <br />#本例子linux测试通过。<br />#本例子 先把【ps找算替v1.22.ps1】保存在【/powershell/】中<br />#本例子目的：<br />#任何带有 UseDNS,#UseDNS
    的行，先清空。后写入UseDNS no。若找不到，则在文件尾部添加
  </p>
  <p>
    $gb关闭sshd中的dns =<br />@{<br />输入文件全路径&nbsp;&nbsp;&nbsp;&nbsp; =
    &#39;/etc/ssh/sshd_config&#39;<br />输入文件编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
    65001<br />输出文件全路径&nbsp;&nbsp;&nbsp;&nbsp; = &#39;&#39;<br />&nbsp;<br />找什么 =
    <br />@&#39;<br />UseDNS<br />&#39;@<br />&nbsp;<br />替换成啥 = <br />@&#39;<br />UseDNS
    no<br />&#39;@<br />&nbsp;<br />查找模式 = &#39;行&#39;<br />找不到则在文件末尾追加 = $true<br />查找返回的结果必须唯一 = $true<br />返回结果不唯一时 =
    &#39;全部替换&#39;<br />脚本pid = $pid # 这行用于脚本防错，不要修改。<br />}
  </p>
  <p>
    <br />&amp; /powershell/ps找算替v1.22.ps1&nbsp; @gb关闭sshd中的dns<br />#注意： 这里不能用 /usr/bin/pwsh
    /powershell/ps找算替v1.22.ps1&nbsp; @gb关闭sshd中的dns
  </p>
  <p>
    &nbsp;
  </p>
  <h1 style="text-align: center;">
    -----------------【成品脚本2】-----------------
  </h1>
  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>
  <h1 style="text-align: center;">
    -----------------【成品脚本3】-----------------
  </h1>
  <hr />
  <h1 style="text-align: center;">
    -----------------【linux下安装powershell】-----------------
  </h1>
  <p>
    &nbsp;
  </p>
  <p>
    多种linux发行版一键安装powershell
    <br>
    <a
      href="https://gitee.com/chuanjiao10/kasini3000_agent_linux">https://gitee.com/chuanjiao10/kasini3000_agent_linux</a>

  </p>
  <p>
    &nbsp;
  </p>
  <p>
    微软官方安装方法：<br />
    https://docs.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.2
  </p>
  <p>
    &nbsp;
  </p>

  <p>
    &nbsp;
  </p>
  <p>
    &nbsp;
  </p>



</body>

</html>
